1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<article>
<!--$Id$-->
<articleinfo>
<title>Packet Handling</title>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Eastep</surname>
</author>
</authorgroup>
<pubdate><?dbtimestamp format="Y/m/d"?></pubdate>
<copyright>
<year>2004</year>
<year>2005</year>
<year>2009</year>
<year>2014</year>
<holder>Thomas M. Eastep</holder>
</copyright>
<legalnotice>
<para>Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version
1.2 or any later version published by the Free Software Foundation; with
no Invariant Sections, with no Front-Cover, and with no Back-Cover
Texts. A copy of the license is included in the section entitled
<quote><ulink url="GnuCopyright.htm">GNU Free Documentation
License</ulink></quote>.</para>
</legalnotice>
</articleinfo>
<section id="Intro">
<title>Introduction</title>
<para>This article will try to help you understand how packets pass
through a firewall configured by Shorewall. You may find it useful to have
a copy of the <ulink url="NetfilterOverview.html">Netfilter
Overview</ulink> handy to refer to.</para>
<para>The discussion that follows assumes that you are running a current
kernel (2.6.20 or later) with the <ulink url="kernel.htm">recommended
options </ulink>included. Otherwise processing may be somewhat different
from described below depending on the features supported by your
kernel.</para>
<para>Where a packet is covered by steps in more than one of the following
sections, processing occurs in the order in which the sections
appear.</para>
</section>
<section id="Incoming">
<title>Packets Entering the Firewall from Outside</title>
<para>Certain processing occurs on packets entering the firewall from the
outside that don't occur for packets that originate on the firewall
itself.</para>
<itemizedlist>
<listitem>
<para>The TOS field in the packet is conditionally altered based on
the contents of your <filename>/etc/shorewall/tos</filename> file.
This occurs in the <emphasis role="bold">pretos</emphasis> chain of
the <emphasis>mangle</emphasis> table.</para>
</listitem>
<listitem>
<para>Packets are marked based on the contents of your
<filename>/etc/shorewall/mangle</filename>
(<filename>/etc/shorewall/tcrules</filename>) file and the setting of
MARK_IN_FORWARD_CHAIN in
<filename>/etc/shorewall/shorewall.conf</filename>. This occurs in the
<emphasis role="bold">tcpre</emphasis> chain of the
<emphasis>mangle</emphasis> table.</para>
</listitem>
<listitem>
<para>The destination IP address and/or port number are rewritten
according to DNAT[-] and REDIRECT[-] rules in
<filename>/etc/shorewall/rules</filename>. For new connection
requests, this occurs in a chain in the <emphasis>nat</emphasis> table
called <emphasis role="bold"><emphasis>zone</emphasis>_dnat</emphasis>
where <emphasis>zone</emphasis> is the zone where the request
originated. For packets that are part of an already established
connection, the destination rewriting takes place without any
involvement of a Netfilter rule.</para>
</listitem>
<listitem>
<para>If the destination was not rewritten in the previous step then
it may be rewritten based on entries in /etc/shorewall/nat. For new
connection requests, this occurs in a <emphasis>nat</emphasis> table
chain called <emphasis
role="bold"><emphasis>interface</emphasis>_in</emphasis> where
<emphasis>interface</emphasis> is the interface on which the packet
entered the firewall. For packets that are part of an already
established connection, the destination rewriting takes place without
any involvement of a Netfilter rule.</para>
</listitem>
<listitem>
<para>The packet passes through the accounting rules defined in
<filename>/etc/shorewall/accounting</filename>.</para>
</listitem>
<listitem>
<para>If FASTACCEPT=Yes in <filename>shorewall.conf</filename> and the
packet is part of or related to an existing connection, it is
accepted.</para>
</listitem>
<listitem>
<para>The packet is processed according to your <ulink
url="blacklisting_support.htm">Blacklisting configuration</ulink>
(dynamic blacklist first). If BLACKLISTNEWONLY=Yes in
<filename>/etc/shorewall/shorewall.conf</filename> then only new
connection requests are processed. Processing occurs in the dynamic
and blacklst</para>
</listitem>
<listitem>
<para>If the interface on which the packet entered the firewall has
the <emphasis>nosmurfs</emphasis> option specified in
<filename>/etc/shorewall/interfaces</filename>, then if the packet is
a new connection request is checked for being a smurf in the
<emphasis>filter</emphasis> table's <emphasis
role="bold">smurfs</emphasis> chain.</para>
</listitem>
<listitem>
<para>If:</para>
<itemizedlist>
<listitem>
<para>the packet will be processed by the firewall itself</para>
</listitem>
<listitem>
<para>the interface on which the packet arrived has the
<emphasis>dhcp</emphasis> option in
<filename>/etc/shorewall/interfaces</filename>.</para>
</listitem>
<listitem>
<para>packet's protocol is UDP with destination port 67 or
68.</para>
</listitem>
</itemizedlist>
<para>then the packet is ACCEPTed in the <emphasis>filter</emphasis>
table's <emphasis
role="bold"><emphasis>interface</emphasis>_in</emphasis> chain (for
example, eth0_in). Note that if the interface is its associated zones
only interface, then the <emphasis
role="bold"><emphasis>interface</emphasis>_in</emphasis> chain is
optimized away and its rules are transferred to another chain.</para>
</listitem>
<listitem>
<para>If the interface on which the packet entered the firewall has
the <emphasis>tcpflags</emphasis> option specified in
<filename>/etc/shorewall/interfaces</filename> and the packet's
protocol is TCP then the TCP flags are checked by the <emphasis
role="bold">tcpflags</emphasis> chain (<emphasis>filter</emphasis>
table).</para>
</listitem>
</itemizedlist>
</section>
<section id="All">
<title>All Packets</title>
<para>Regardless of whether the packet originated on the firewall or came
from outside, certain processing steps are common.</para>
<itemizedlist>
<listitem>
<para>Packets are marked based on the contents of your
<filename>/etc/shorewall/tcrules</filename> file and the setting of
MARK_IN_FORWARD_CHAIN in
<filename>/etc/shorewall/shorewall.conf</filename>. This occurs in the
<emphasis role="bold">tcfor</emphasis> chain of the
<emphasis>mangle</emphasis> table.</para>
<para>The remaining processing in this list occurs in the
<emphasis>filter</emphasis> table.</para>
</listitem>
<listitem>
<para>If either the host sending the packet or the host to which the
packet is addressed is not in any defined zone then the all->all
policy is applied to the packet (including logging). This can occur in
the INPUT, FORWARD or OUTPUT chains.</para>
</listitem>
<listitem>
<para>If the packet is part of an established connection or is part of
a related connection then no further processing takes place in the
filter table
(<emphasis><emphasis>zone1</emphasis>2<emphasis>zone2</emphasis></emphasis>
chain where <emphasis>zone1</emphasis> is the source zone and
<emphasis>zone2</emphasis> is the destination zone).</para>
</listitem>
<listitem>
<para>The packet is processed according to your
<filename>/etc/shorewall/rules</filename> file. This happens in chains
named <emphasis><emphasis
role="bold"><emphasis>zone1</emphasis>2<emphasis>zone2</emphasis></emphasis></emphasis>
chain where <emphasis>zone1</emphasis> is the source zone and
<emphasis>zone2</emphasis> is the destination zone. Note that in the
presence of <ulink url="manpages/shorewall-nested.html">nested or
overlapping zones</ulink> and CONTINUE policies, a packet may go
through more than one of these chains.</para>
</listitem>
<listitem>
<para>Note: If the packet gets to this step, it did not match any
rule.</para>
<para>If the applicable policy has a <ulink url="Actions.html">common
action</ulink> then that action is applied (chain has the same name as
the action).</para>
</listitem>
<listitem>
<para>If the applicable policy has logging specified, the packet is
logged.</para>
</listitem>
<listitem>
<para>The policy is applied (the packet is accepted, dropped or
rejected).</para>
</listitem>
</itemizedlist>
</section>
<section id="Local">
<title>Packets Originating on the Firewall</title>
<para>Packets that originate on the firewall itself undergo additional
processing.</para>
<itemizedlist>
<listitem>
<para>The TOS field in the packet is conditionally altered based on
the contents of your <filename>/etc/shorewall/tos</filename> file.
This occurs in the <emphasis role="bold">outtos</emphasis> chain of
the <emphasis>mangle</emphasis> table.</para>
</listitem>
<listitem>
<para>Packets are marked based on the contents of your
<filename>/etc/shorewall/tcrules</filename> file. This occurs in the
<emphasis role="bold">tcout</emphasis> chain of the
<emphasis>mangle</emphasis> table.</para>
</listitem>
</itemizedlist>
</section>
<section id="Egress">
<title>Packets Leaving the Firewall</title>
<para>Packets being sent to another host undergo additional
processing.</para>
<note>
<para>The source IP address only gets rewritten by the first matching
rule below.</para>
</note>
<itemizedlist>
<listitem>
<para>The source IP address may be rewritten according to DNAT rules
that specify SNAT. If this is a new connection request, then the
rewriting occurs in a <emphasis>nat</emphasis> table chain called
<emphasis role="bold"><emphasis>zone</emphasis>_snat</emphasis> where
<emphasis>zone</emphasis> is the destination zone. For packets that
are part of an already established connection, the destination
rewriting takes place without any involvement of a Netfilter
rule.</para>
</listitem>
<listitem>
<para>If FASTACCEPT=Yes in <filename>shorewall.conf</filename> and the
packet is part of or related to an existing connection, it is
accepted.</para>
</listitem>
<listitem>
<para>The source IP address may be rewritten according to an entry in
the <filename>/etc/shorewall/nat</filename> file. If this is a new
connection request, then the rewriting occurs in a
<emphasis>nat</emphasis> table chain called <emphasis
role="bold"><emphasis>interface</emphasis>_snat</emphasis> where
<emphasis>interface</emphasis> is the interface on which the packet
will be sent. For packets that are part of an already established
connection, the destination rewriting takes place without any
involvement of a Netfilter rule.</para>
</listitem>
<listitem>
<para>The source IP address may be rewritten according to an entry in
the <filename>/etc/shorewall/masq</filename> file. If this is a new
connection request, then the rewriting occurs in a
<emphasis>nat</emphasis> table chain called <emphasis
role="bold"><emphasis>interface</emphasis>_masq</emphasis> where
<emphasis>interface</emphasis> is the interface on which the packet
will be sent. For packets that are part of an already established
connection, the destination rewriting takes place without any
involvement of a Netfilter rule.</para>
</listitem>
</itemizedlist>
</section>
</article>
|